#pragma once

#include <string>
#include <functional>

namespace Yohifo
{
    // Service() 业务处理函数的类型
    using cb_t = std::function<void(int, std::string, uint16_t)>;

    class Task
    {
    public:
        // 可以再提供一个默认构造（防止部分场景中构建对象失败）
        Task()
        {}

        Task(int sock, const std::string& ip, const uint16_t& port, const cb_t& cb)
            :sock_(sock), ip_(ip), port_(port), cb_(cb)
        {}

        // 重载运算操作，用于回调 [业务处理函数]
        void operator()()
        {
            // 直接回调 cb [业务处理函数] 即可
            cb_(sock_, ip_, port_);
        }

    private:
        int sock_;
        std::string ip_;
        uint16_t port_;
        cb_t cb_; // 回调函数
    };
}